package main

import "fmt"

type abc struct {
	name string
	age int
	sex byte
}

func (tmp *abc) ppp(a string, b int, c byte)  {
	tmp.name = a
	tmp.age = b
	tmp.sex = c
	fmt.Printf("&a = %p\n", tmp)
}

func (uuu *abc) www() {
	fmt.Printf("&a = %p\n", uuu)
}

func main()  {
	a := abc{"mike", 19, 'm'}

	//传统调用方式
	fmt.Printf("main &a = %p\n", &a)
	a.ppp("go", 20, 'f')

	//方法值，调用函数的时候隐藏了接受者，无需传递接受者
	f := a.ppp
	f("php", 22, 'm')

	//方法表达式，调用函数时显示接收者格式就是(指针类型或者普通变量类型).方法名，不好用，不知道这种怎么传值，方法值好用些
	g := (*abc).www
	g(&a)
}
